'''作业2  设计一个装饰器，打印函数执行时间'''

案例
def m(n):#装饰函数
    print(n) #现在的形参n==被装饰的函数
    def nb(*args,**kw): #被装饰的内部函数
        print('*'*20) #在传入的函数执行前作一些操作
        n(*args,**kw) #执行函数
        print('*' * 20)  # 在传入的函数执行后作一些操作
        # return n(*args,**kw) #return既可以返回，也可以调用
    return nb #【1】返回nb函数名
# 自动将其下的函数作为参数传到装饰器函数中
@m
# 被装饰函数
def ych(x):
    print('装饰器')
ych(1)



推导式# 列表生成式
lst=[1,2,3,4,5,6,7,8]
new_lst=[i+j for i in lst for j in lst if i%2==1 if j%3==0]
print(new_lst)
# 循环
l=[]
for i in lst:
    for j in lst:
        if i%2==1:
            if j%3==0:
                l.append(i+j)
print(l)


作业2代码实现：
import time
# 装饰函数
def computer_runtime(func): #func即下文被装饰函数
    #把run方法扩展功能之后的新方法
    def wrapper(*args,**kwargs):  #写可变参数接收是为了防止被装饰函数由参数
        start=time.time()
        print(start)
        #调用函数
        func(*args,**kwargs)
        end=time.time()
        print(end)
        print('%s执行了%f秒'%(func.__name__,end-start))
    #回调装饰函数
    return wrapper

# 语法糖，后紧接被装饰函数
@computer_runtime
def run(z):
    # 休眠1秒
    time.sleep(1) #防止运行时间很短
    #推导式
    l=[x**2 * z for x in range(1000)]
    print(l)
run(10)